package br.com.jmed.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 * The persistent class for the paciente database table.
 * 
 */
@Entity
@NamedQueries(@NamedQuery(name = "Paciente.findByName", query = "SELECT p FROM Paciente AS p WHERE p.nome LIKE :nome AND p.situacao = 'A'"))
public class Paciente implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Basic
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer codigo;

	private String bairro;

	private String cep;

	private Integer cidade;

	private String cpf;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_alteracao")
	private Date dataAlteracao;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_inclusao")
	private Date dataInclusao;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_nascimento")
	private Date dataNascimento;

	private String endereco;

	private String nome;

	private Integer rg;

	private String sexo;

	private String telefone;
	private String situacao;

	// uni-directional many-to-one association to Usuario
	@ManyToOne
	@JoinColumn(name = "usuario_inclusao")
	private Usuario usuarioInclusao;

	// uni-directional many-to-one association to Usuario
	@ManyToOne
	@JoinColumn(name = "usuario_alteracao")
	private Usuario usuarioAlteracao;

	// bi-directional many-to-one association to PacienteConvenio
	@OneToMany(mappedBy = "paciente", fetch = FetchType.LAZY)
	private List<PacienteConvenio> pacienteConvenios;

	public Paciente() {
	}

	public Integer getCodigo() {
		return this.codigo;
	}

	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	public String getBairro() {
		return this.bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCep() {
		return this.cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public Integer getCidade() {
		return this.cidade;
	}

	public void setCidade(Integer cidade) {
		this.cidade = cidade;
	}

	public String getCpf() {
		return this.cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public Date getDataAlteracao() {
		return this.dataAlteracao;
	}

	public void setDataAlteracao(Date dataAlteracao) {
		this.dataAlteracao = dataAlteracao;
	}

	public Date getDataInclusao() {
		return this.dataInclusao;
	}

	public void setDataInclusao(Date dataInclusao) {
		this.dataInclusao = dataInclusao;
	}

	public Date getDataNascimento() {
		return this.dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public String getEndereco() {
		return this.endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Integer getRg() {
		return this.rg;
	}

	public void setRg(Integer rg) {
		this.rg = rg;
	}

	public String getSexo() {
		return this.sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getTelefone() {
		return this.telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public Usuario getUsuarioInclusao() {
		return this.usuarioInclusao;
	}

	public void setUsuarioInclusao(Usuario usuarioInclusao) {
		this.usuarioInclusao = usuarioInclusao;
	}

	public Usuario getUsuarioAlteracao() {
		return this.usuarioAlteracao;
	}

	public void setUsuarioAlteracao(Usuario usuarioAlteracao) {
		this.usuarioAlteracao = usuarioAlteracao;
	}

	public List<PacienteConvenio> getPacienteConvenios() {
		return this.pacienteConvenios;
	}

	public void setPacienteConvenios(List<PacienteConvenio> pacienteConvenios) {
		this.pacienteConvenios = pacienteConvenios;
	}

	public String getSituacao() {
		return situacao;
	}

	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	@Transient
	public Integer getIdade() {
		if (getDataNascimento() != null) {
			return new Date().getYear() - getDataNascimento().getYear();
		} else {
			return null;
		}
	}

}